package com.test.strategy;
import com.test.definition.BeanDefinition;
import java.lang.reflect.Constructor;

/**
 * 瞬间化策略接口，定义了如何实例化一个bean
 * 这个接口主要是为了提供不同的实例化bean的策略，可以根据不同的需求使用不同的实例化方式
 * 它是策略模式的一个应用，允许在运行时选择不同的实例化策略
 */
public interface InstantiationStrategy {

    /**
     * 实例化一个bean
     *
     * @param beanDefinition bean的定义，包含了bean的各种属性和行为
     * @param beanName bean的名称，用于标识一个bean
     * @param ctor 构造函数，用于实例化bean
     * @param args 构造函数的参数
     * @return 实例化的bean对象
     */
    Object instantiate(BeanDefinition beanDefinition, String beanName, Constructor<?> ctor, Object[] args);
}
